/**
 * Recife Action Tools - RAT
 * Centro de Inform�tica - CIn - UFPE
 *
 * Biblioteca para Gera��o de Analisador L�xico
 */

package br.ufpe.abaco.ParserGen.lexer;

import br.ufpe.abaco.ParserGen.CompilerException;

/**
 * Esta classe representa a exce��o a ser levantada quando
 * ocorre um erro da an�lise l�xica.
 * 
 * @author Monique Monteiro, Pablo Sampaio
 */
public class LexicalErrorException extends CompilerException {

	/**
	 * Construtor da classe.
	 * 
	 * @param token		token imediatamente anterior ao erro
	 */
	public LexicalErrorException(Token token) {
		this(token.getValue(), token.getLine(), token.getStartPos());		
	}

	public LexicalErrorException(String restOfString) {
		super("Lexical Error starting in: " + 
		   (restOfString.length()<=20?
		   		restOfString:
		   		(restOfString.substring(0,19)+" ...")
			)
		);
	}
	
	/**
	 * Construtor da classe.
	 * 
	 * @param lexeme	string que n�o foi reconhecida
	 * @param line		linha onde ocorreu o erro
	 * @param column	columa onde ocorreu o erro
	 */
	public LexicalErrorException(String lexeme, int line, int column) {
		super(
			"Lexical error near "
				+ lexeme
				+ " at line "
				+ line
				+ ", position "
				+ column);
	}
	
	public String toString() {
		return getMessage();
	}
}
